home *** CD-ROM | disk | FTP | other *** search
/ Softdisk Supreme / Softdisk Supreme.iso / pc / DSK Files / 0-49 / SD024b.dsk / NIM.bas < prev    next >
BASIC Source File  |  2003-06-12  |  7KB  |  212 lines

  1. 1  GOTO 10
  2. 2  CALL 768: RETURN 
  3. 10 ZP = 49200
  4. 11  GOSUB 50010
  5. 20  DIM WP(14,3),FM(5,2),SW(3),PO(3),R3(3),R4(3)
  6. 25  DIM N$(2),TP(2)
  7. 30  GOSUB 9000: GOTO 4000
  8. 999  REM  SQUARE DISAPPEAR ROUTINE
  9. 1000  FOR I = 9 TO 3  STEP  -2
  10. 1010 X1 = X1 +1:Y1 = Y1 -1
  11. 1015  REM 
  12. 1020  SCALE= I
  13. 1030  GOSUB 2: XDRAW 1 AT X2,Y2: GOSUB 2: XDRAW 2 AT X2,Y2
  14. 1040  SCALE= I -2
  15. 1050  GOSUB 2: XDRAW 1 AT X1,Y1: GOSUB 2: XDRAW 2 AT X1,Y1
  16. 1060 X2 = X1:Y2 = Y1
  17. 1070  NEXT 
  18. 1080  GOSUB 2: XDRAW 2 AT X1,Y1
  19. 1099  REM  FLASH SQUARE
  20. 1100  FOR J = 1 TO 5
  21. 1110  REM 
  22. 1120  GOSUB 2: XDRAW 1 AT X1,Y1
  23. 1125  GOSUB 2: XDRAW 2 AT X1,Y1
  24. 1130  NEXT 
  25. 1199  REM  EXPAND AGAIN
  26. 1200  FOR I = 3 TO 9  STEP 2
  27. 1210 X1 = X1 -1:Y1 = Y1 +1
  28. 1215  REM 
  29. 1220  SCALE= I -2
  30. 1230  GOSUB 2: XDRAW 2 AT X2,Y2
  31. 1240  SCALE= I
  32. 1250  GOSUB 2: XDRAW 2 AT X1,Y1
  33. 1260 X2 = X1:Y2 = Y1
  34. 1270  NEXT 
  35. 1280  REM 
  36. 1290  GOSUB 2: XDRAW 2 AT X1,Y1
  37. 1295  RETURN 
  38. 1498  REM   CALCULATE BASE POINT (X,Y)
  39. 1499  REM FOR RIGHTMOST SQUARE IN ROW R
  40. 1500 J = (R -1) *50:I = (PO(R) -1) *40
  41. 1505 X1 = I +15:Y1 = J +30
  42. 1510 X2 = I +15:Y2 = J +30
  43. 1598  REM  PLOT THE CRUSHER, FULL SIZE,
  44. 1599  REM  AT X1,Y1
  45. 1600  SCALE= 9: GOSUB 2: XDRAW 2 AT X1,Y1
  46. 1610  RETURN 
  47. 2000  REM   DECIDE IF IT IS THE FIRST MOVE
  48. 2010  IF MN >1  THEN  GOTO 2030
  49. 2020 RN =  INT( RND(1) *5) +1:R = FM(RN,1):RN = FM(RN,2): RETURN 
  50. 2030  REM  FIND GOOD MOVE
  51. 2040  FOR X = 1 TO WM
  52. 2050  FOR W = 1 TO 3:R3(W) = 0:R4(W) = 0: NEXT W
  53. 2060  FOR Y = 1 TO 3
  54. 2070  FOR Z = 1 TO 3
  55. 2080  IF R3(Z) >0  THEN  GOTO 2120
  56. 2090  IF PO(Y) = WP(X,Z)  THEN R3(Z) = Y:R4(Y) = Z: GOTO 2130
  57. 2120  NEXT Z
  58. 2130  NEXT Y
  59. 2132 C = 0:R5 = 6:R6 = 6
  60. 2134  FOR W = 1 TO 3
  61. 2135 R6 = R6 -R4(W)
  62. 2136  IF R3(W) >0  THEN C = C +1:R5 = R5 -R3(W): GOTO 2140
  63. 2140  NEXT W
  64. 2142  IF C = 2  THEN R = R5:RN = PO(R) -WP(X,R6): IF RN >0  THEN  RETURN 
  65. 2150  NEXT X
  66. 2160 R =  INT( RND(1) *4)
  67. 2170  IF PO(R) = 0  THEN  GOTO 2160
  68. 2180 RN =  INT( RND(1) *PO(R)) +1: RETURN 
  69. 4000  HOME : VTAB (7)
  70. 4010  PRINT "ENTER THE NUMBER OF PLAYERS (1 OR 2) ";: GET R$
  71. 4020  IF R$ = "1" GOTO 4100
  72. 4030  IF R$ = "2" GOTO 4200
  73. 4040  PRINT  CHR$(7): GOTO 4000
  74. 4100  HOME : VTAB (7)
  75. 4110  PRINT "PLEASE ENTER YOUR NAME..."
  76. 4120  INPUT N$(1)
  77. 4130  HOME : VTAB (7)
  78. 4140  PRINT "DO YOU WANT TO GO FIRST? (Y FOR YES) ";: GET R$
  79. 4150  IF R$ < >"Y" GOTO 4180
  80. 4160 TP(1) = 1:TP(2) = 2:N$(2) = "THE COMPUTER"
  81. 4170  GOTO 4500
  82. 4180 TP(1) = 2:TP(2) = 1:N$(2) = N$(1):N$(1) = "THE COMPUTER"
  83. 4190  GOTO 4500
  84. 4200 TP(1) = 1:TP(2) = 1: HOME : VTAB (7)
  85. 4210  PRINT "PLEASE ENTER THE NAME"
  86. 4220  PRINT "OF THE PLAYER TO GO FIRST..."
  87. 4230  INPUT N$(1)
  88. 4240  HOME : VTAB (7)
  89. 4250  PRINT "PLEASE ENTER THE NAME"
  90. 4260  PRINT "OF THE PLAYER TO GO SECOND..."
  91. 4270  INPUT N$(2)
  92. 4500  GOSUB 9600
  93. 4505 P = 1:MN = 1
  94. 4510  HOME : VTAB (21)
  95. 4520  PRINT N$(P);"'S TURN..."
  96. 4525  ON TP(P) GOSUB 5100,5500
  97. 4530  IF (PO(1) = 0)  AND (PO(2) = 0)  AND (PO(3) = 0)  THEN  ON TP(P) GOTO 6500,6000
  98. 4540 P = P +1: IF P >2  THEN P = 1
  99. 4550 MN = MN +1: GOTO 4510
  100. 5100 Q1 = 0: PRINT ""
  101. 5110  PRINT "ENTER THE ROW OF YOUR CHOICE (1-3) ";
  102. 5115  GET R$
  103. 5120  IF R$ = "1"  THEN R = 1: GOTO 5200
  104. 5130  IF R$ = "2"  THEN R = 2: GOTO 5200
  105. 5140  IF R$ = "3"  THEN R = 3: GOTO 5200
  106. 5150  PRINT  CHR$(7);: REM  BELL
  107. 5160  HTAB (36): VTAB (23): GOTO 5115
  108. 5199  REM  <RETURN> OR <ESC>
  109. 5200  IF PO(R) = 0 GOTO 5150
  110. 5202  HOME : VTAB (21)
  111. 5210  PRINT "<RETURN> TO REMOVE THE INDICATED PIECE"
  112. 5220  PRINT "<ESC>    TO END THE MOVE"
  113. 5225  GOSUB 1500
  114. 5230  GET R$
  115. 5240  IF R$ =  CHR$(13) GOTO 5300: REM  <RET>
  116. 5250  IF R$ =  CHR$(27) GOTO 5400: REM  <ESC>
  117. 5260  PRINT  CHR$(7);: REM  BELL
  118. 5270  HTAB (1): GOTO 5230
  119. 5299  REM  <RETURN> - REMOVE THE SQUARE
  120. 5300 PO(R) = PO(R) -1
  121. 5305 Q1 = Q1 +1
  122. 5310  GOSUB 1000
  123. 5320  IF PO(R) < >0  THEN  HTAB (1): GOTO 5225
  124. 5325  RETURN 
  125. 5399  REM  <ESC> - CHECK THAT SOME WERE TAKEN
  126. 5400  IF Q1 = 0  THEN  HOME : VTAB (21): GOSUB 1600: GOTO 5100
  127. 5405  GOSUB 1600
  128. 5410  RETURN 
  129. 5499  REM  COMPUTER MOVE
  130. 5500  GOSUB 2000: REM  GET R & RN
  131. 5501  FOR W = 1 TO 1000
  132. 5502  HOME : VTAB (21)
  133. 5504  PRINT "I CHOOSE TO TAKE ";RN;" FROM ROW ";R
  134. 5508  FOR W = 1 TO 600
  135. 5510  FOR IJ = 1 TO RN
  136. 5520  GOSUB 1500
  137. 5525 PO(R) = PO(R) -1: GOSUB 1000
  138. 5530  NEXT IJ
  139. 5547  REM 
  140. 5550  RETURN 
  141. 5560  GOTO 5500
  142. 5999  REM  COMPUTER LOST
  143. 6000  HOME : VTAB (21)
  144. 6010  PRINT "SO I LOST...BIG DEAL!"
  145. 6020  INPUT "DO YOU DARE TRY AGAIN? (Y FOR YES) ";R$
  146. 6030  IF R$ = "Y"  THEN  TEXT : GOTO 4000
  147. 6040  GOTO 7000
  148. 6099  REM  HUMAN LOST
  149. 6500  HOME : VTAB (21)
  150. 6510  IF (P = 1)  AND (TP(2) = 2) GOTO 6600
  151. 6515  IF (P = 2)  AND (TP(1) = 2) GOTO 6600
  152. 6520 P = P -1: IF P <1  THEN P = 2
  153. 6530  PRINT N$(P);" WON!  WELL DONE!"
  154. 6540  GOTO 6610
  155. 6600  PRINT "I WON YET AGAIN!"
  156. 6610  INPUT "DO YOU WANT ANOTHER GAME? (Y FOR YES) ";R$
  157. 6620  IF R$ = "Y"  THEN  TEXT : GOTO 4000
  158. 6630  GOTO 7000
  159. 7000  TEXT : HOME : PRINT  CHR$(4);"RUN MENU"
  160. 9000  TEXT : HOME 
  161. 9010  HTAB (12): VTAB (7): PRINT "W E L C O M E"
  162. 9020  HTAB (17): VTAB (9): PRINT "T O"
  163. 9030  HTAB (16): VTAB (11): PRINT "N I M"
  164. 9040  VTAB (15): PRINT "BY: DAVID GRIEBELBAUER"
  165. 9050  HTAB (5): PRINT "DON SONOM"
  166. 9060  VTAB (23): PRINT "DO YOU WANT INSTRUCTIONS? (Y FOR YES) ";
  167. 9070  GET R$: IF R$ < >"Y" GOTO 9300
  168. 9080  HOME : HTAB (18): PRINT "N I M"
  169. 9090  PRINT "": PRINT "NIM IS A SIMPLE GAME FOR TWO PLAYERS;"
  170. 9100  PRINT "ONE OF WHICH MAY BE THE COMPUTER."
  171. 9110  PRINT "PLAYERS ALTERNATE REMOVING SQUARES FROM"
  172. 9120  PRINT "THE SCREEN.  THE PLAYER WHO REMOVES THE"
  173. 9130  PRINT "LAST SQUARE LOSES."
  174. 9140  PRINT "": PRINT "ANY NUMBER OF SQUARES MAY BE REMOVED"
  175. 9150  PRINT "FROM A SINGLE ROW.  ROW ONE IS AT THE"
  176. 9160  PRINT "TOP; ROW THREE IS AT THE BOTTOM."
  177. 9170  PRINT "": PRINT "ALL INPUT TO THE COMPUTER WILL BE"
  178. 9180  PRINT "SINGLE KEY-STROKE ENTRIES.  USE THE"
  179. 9190  PRINT "<RETURN> KEY ONLY TO REMOVE A SQUARE"
  180. 9200  PRINT "FROM THE SCREEN."
  181. 9210  VTAB (23): PRINT "HIT THE <RETURN> KEY TO START THE GAME ";
  182. 9220  GET R$
  183. 9299  REM  WINNING POSITIONS AND GOOD FIRST MOVES
  184. 9300  DATA  0,0,1,0,2,2,0,3,3,0,4,4,0,5,5,1,1,1,1,2,3,1,4,5,2,4,6
  185. 9305  DATA  1,2,1,1,3,3,3,1,2,1
  186. 9310 WM = 9
  187. 9320  FOR X = 1 TO WM
  188. 9330  FOR Y = 1 TO 3: READ WP(X,Y): NEXT 
  189. 9340  NEXT 
  190. 9350  FOR X = 1 TO 5
  191. 9360  FOR Y = 1 TO 2: READ FM(X,Y): NEXT 
  192. 9370  NEXT 
  193. 9499  REM  ALL GRAPHICS INITIALIZATION
  194. 9500  DATA       19,2,0,6,0,9,0,44            ,            62,0,58,4,32,37            ,53,181,62,62,4,0
  195. 9510  READ I
  196. 9520  FOR J = 16384 TO 16384 +I -1
  197. 9530  READ K: POKE J,K
  198. 9540  NEXT 
  199. 9550  POKE 232,0: POKE 233,64: REM   SHAPE TABLE IS AT THE TOP OF SCREEN #2
  200. 9560  RETURN 
  201. 9599  REM  SET UP SCREEN
  202. 9600  HGR : HCOLOR= 3: ROT= 0: SCALE= 9
  203. 9610 PO(1) = 3:PO(2) = 5:PO(3) = 7
  204. 9620  FOR R = 1 TO 3
  205. 9630  FOR K = 1 TO PO(R)
  206. 9640 J = (R -1) *50:I = (K -1) *40
  207. 9650 X1 = I +15:Y1 = J +30
  208. 9655  GOSUB 2: XDRAW 1 AT X1,Y1
  209. 9660  NEXT K
  210. 9670  NEXT R
  211. 9990  RETURN 
  212. 50010  POKE 768,169: POKE 769,16: POKE 770,32: POKE 771,168: POKE 772,252: POKE 773,160: POKE 774,19: POKE 775,169: POKE 776,4: POKE 777,32: POKE 778,168: POKE 779,252: POKE 780,173: POKE 781,48: POKE 782,192: POKE 783,136: POKE 784,208: POKE 785,245: POKE 786,96: RETURN